#include<stdio.h>
#include<stdlib.h>
#include<string.h>



// @函数指针

void func(int a, char c){
    printf("Hello world\n");
}

// 第一种定义方式
void test1(){
    // 先定义函数类型，再通过定义类型 定义指针
    typedef void(FUNC_TYPE)(int,char);

    FUNC_TYPE * pFunc = func;

    pFunc(10,'c');
}

// 第二种定义方式
void test2(){
    // 定义函数指针的类型，
    typedef void(*FUNC_TYPE)(int,char);
    FUNC_TYPE pFunc = func;
    pFunc(20,'a');
}

// 
void test3(){
    // int * p = func;

    void (*pFunc)(int,char) = func;
    pFunc(30,'d');
}

// 函数指针    指针函数
// 指向函数的一个指针

// 指针函数  函数的返回值是指针的函数

// 函数指针的数组
void func1(){
    printf("嗲用了func1\n");
}
void func2(){
    printf("嗲用了func2\n");
}
void func3(){
    printf("嗲用了func3\n");
}

void test4(){
    void(*pArray[3])();
    pArray[0] = func1; 
    pArray[1] = func2; 
    pArray[2] = func3; 

    for(int i=0;i<3;i++){
        pArray[i]();
    }
}


void main(){

    // printf("%d\n", test1);  // 地址
    test1();
    test2();
    test3();

    test4();



}